package com.wenjie.common.enumHandler;

import cn.hutool.core.convert.Convert;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;

@JsonFormat(shape = JsonFormat.Shape.OBJECT)
@JsonDeserialize(using = EnumDeserializer.class)
public interface IEnum<T> {

    static <T extends IEnum> T getEnumByCode(Class<T> enumTypeClazz, Object value) {
        if (enumTypeClazz == null || value == null) {
            return null;
        }

        Optional<T> optional = Arrays.stream(enumTypeClazz.getEnumConstants()).filter(e -> {
            Object enumCode = e.getCode();
            return Objects.equals(Convert.convert(enumCode.getClass(), value), enumCode);
        }).findFirst();

        //如果不存在则抛异常
        return optional.orElseThrow(() -> new RuntimeException("[" + enumTypeClazz.getSimpleName() + "]参数错误[" + value + "]"));
    }

    T getCode();
}

